"""
爬取
网页
https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
爬取一级目录的 前二十个电影名
以及所有电影的二级目录  并且匹配出 二级目录的剧情简介 · · · · · ·
保存该剧情简介字段以及电影名字段 保存为json格式文件
代码 截图发我
不能用xpath
发我qq邮箱 --2203期-xx同学--第二次作业
作业在下周五 之前交

做作业流程
给到的基础信息
https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
确认需求
1 电影标题   也可以理解成 二级目录的标题
2.二级目录的简介
3.保存为json格式文件  item={"title",neirong}

限制条件
不能用xpath


分析过程
一级目录里的url              =https://movie.douban.com/subject/35284253/
二级目录里 有简介响应数据的的url=https://movie.douban.com/subject/35284253/

得出初步想法
1通过获取一级目录的20个电影的url
2发送20次请求
3再提取数据

"""
import json
import re

import jsonpath
import requests
# 包含20个电影的url
url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0"

# 构建请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest"
}

# 发送请求        小tips  直接再发送ajax请求的后面加上.json() 就可以直接返回 response
response = requests.get(url=url, headers=headers)
data=response.content.decode()

# url2=jsonpath.jsonpath(response,"$..url")
title = re.findall('"url":"(.*?)"', data)[0]
print(title)
# print(len(url2),url2)
# ['https://movie.douban.com/subject/35284253/'
#   https://movie.douban.com/subject/35284253/
# ['https:\\/\\/movie.douban.com\\/subject\\/35284253\\/'
urlss=title.replace("\\","")
print(urlss)

# # 2发送20次请求    会出现 封ip  就温柔一点  也可以使用 time
with open("数据2.json","w",encoding="utf-8")as f:
    for urls in urlss:
    #     发送请求
        respone2=requests.get(url=urls,headers=headers)

        data2=respone2.content.decode()

        print(data2)
    # 正则提取的重点  需要在控制台复制字符串 构建正则表达式

    # 通过正则对html数据进行提取  数据类型是字符串 ]
    #     提取 简介的部分
    #  re.S 代表的是 对换行后的字符串一起匹配  相当于对该字符一下所有的字符进行匹配
        content=re.findall('<span property="v:summary".*?>(.*?)</span>',data2,re.S)
        # 发现数据是有杂乱字符的 以及空格有很多  通过字符串replace替换方法 替换嘛  strip 清洗
        # repalce 字符串替换
        # strip 字符串头和尾部的 换行符和空格去除
        content2=content[0].strip().replace("<br />","").replace(" ","").replace("\n","")  # 字符串清洗方法 可以保存使用
        # # print(content2)
        title=re.findall('<title>\n        (.*?) \(豆瓣\)\n</title>',data2)
        # print(title)
        item={"title":title,
              "content":content2}
        json.dump(item,f,ensure_ascii=False,indent=3)







